class FlightConf:
    """
    机票查询配置类，用于存储和管理查询条件的配置参数
    
    Attributes:
        work_dir (str): 工作目录，默认值为空字符串
        departure_country (str): 出发国家，默认值为空字符串
        departure_city_list (list[str]): 出发城市列表，例如：["北京", "上海"]
        arrival_country (str): 到达国家，默认值为空字符串
        arrival_city_list (list[str]): 目的城市列表，例如：["广州", "深圳"]
        departure_date (str): 出发日期，默认值为空字符串
        
        max_duration (int): 最大飞行时长，单位：小时，默认值为 24 小时
        max_total_price (int): 最大总价格，单位：元，默认值为 5000 元
        sort_by (list[str]): 排序规则字段，默认值为 ['total_price', 'duration'] 默认先按总价格排序，再按持续时间排序
        limit (int): 返回最优的记录条数，默认为20条
    """

    def __init__(self):
        self._work_dir = ""
        self._departure_country = ""
        self._departure_city_list = []
        self._arrival_country = ""
        self._arrival_city_list = []
        self._departure_date = ""
        self._max_duration = 24 # 最大飞行时长，单位：小时，默认值为 24 小时
        self._max_total_price = 5000 # 最大总价格，单位：元，默认值为 5000 元
        self._sort_by = ['total_price', 'duration'] # 排序字段，先按总价格排序，再按持续时间排序
        self._limit = 20 # 返回最优的记录条数，默认为20条

    def __str__(self) -> str:
        """返回配置的字符串表示"""
        return f"Conf(departure_country={self._departure_country}, departure_city_list={self._departure_city_list}, arrival_country={self._arrival_country}, arrival_city_list={self._arrival_city_list}, departure_date={self._departure_date}, max_duration={self._max_duration}, max_total_price={self._max_total_price}, sort_by={self._sort_by}, limit={self._limit}, work_dir={self._work_dir})"

    @property
    def work_dir(self) -> str:
        """获取工作目录"""
        return self._work_dir

    @work_dir.setter
    def work_dir(self, value: str) -> None:
        """设置工作目录，包含验证逻辑"""
        if not isinstance(value, str) or not value.strip():
            raise ValueError("工作目录必须是一个非空字符串")
        self._work_dir = value

    @property
    def departure_country(self) -> str:
        """获取出发国家"""
        return self._departure_country

    @departure_country.setter
    def departure_country(self, value: str) -> None:
        """设置出发国家，包含验证逻辑"""
        if not isinstance(value, str) or not value.strip():
            raise ValueError("出发国家必须是一个非空字符串")
        self._departure_country = value

    @property
    def departure_city_list(self) -> list[str]:
        """获取出发城市列表"""
        return self._departure_city_list

    @departure_city_list.setter
    def departure_city_list(self, value: list[str]) -> None:
        """设置出发城市列表，包含验证逻辑"""
        if not isinstance(value, list) or not all(isinstance(item, str) and item.strip() for item in value):
            raise ValueError("出发城市列表必须是一个非空字符串列表")
        self._departure_city_list = value

    @property
    def arrival_country(self) -> str:
        """获取到达国家"""
        return self._arrival_country

    @arrival_country.setter
    def arrival_country(self, value: str) -> None:
        """设置到达国家，包含验证逻辑"""
        if not isinstance(value, str) or not value.strip():
            raise ValueError("到达国家必须是一个非空字符串")
        self._arrival_country = value

    @property
    def arrival_city_list(self) -> list[str]:
        """获取到达城市列表"""
        return self._arrival_city_list

    @arrival_city_list.setter
    def arrival_city_list(self, value: list[str]) -> None:
        """设置到达城市列表，包含验证逻辑"""
        if not isinstance(value, list) or not all(isinstance(item, str) and item.strip() for item in value):
            raise ValueError("到达城市列表必须是一个非空字符串列表")
        self._arrival_city_list = value

    @property
    def departure_date(self) -> str:
        """获取出发日期"""
        return self._departure_date

    @departure_date.setter
    def departure_date(self, value: str) -> None:
        """设置出发日期，包含验证逻辑"""
        if not isinstance(value, str) or not value.strip():
            raise ValueError("出发日期必须是一个非空字符串")
        self._departure_date = value
    
    @property
    def max_duration(self) -> int:
        """获取最大飞行时长，单位：小时"""
        return self._max_duration
    
    @max_duration.setter
    def max_duration(self, value: int) -> None:
        """设置最大飞行时长，包含验证逻辑"""
        if not isinstance(value, int) or value <= 0:
            raise ValueError("最大飞行时长必须是一个大于0的整数")
        self._max_duration = value

    @property
    def max_total_price(self) -> int:
        """获取最大总价格，单位：元"""
        return self._max_total_price
    
    @max_total_price.setter
    def max_total_price(self, value: int) -> None:
        """设置最大总价格，包含验证逻辑"""
        if not isinstance(value, int) or value <= 0:
            raise ValueError("最大总价格必须是一个大于0的整数")
        self._max_total_price = value

    @property
    def sort_by(self) -> list[str]:
        """获取排序规则字段"""
        return self._sort_by
    
    @sort_by.setter
    def sort_by(self, value: list[str]) -> None:
        """设置排序规则字段，包含验证逻辑"""
        if not isinstance(value, list) or not all(isinstance(item, str) and item.strip() for item in value):
            raise ValueError("排序规则字段必须是一个非空字符串列表")
        self._sort_by = value

    @property
    def limit(self) -> int:
        """获取返回记录数量限制"""
        return self._limit
    
    @limit.setter
    def limit(self, value: int) -> None:
        """设置返回记录数量限制，包含验证逻辑"""
        if not isinstance(value, int) or value <= 0:
            raise ValueError("返回记录数量限制必须是一个大于0的整数")
        self._limit = value
